/**
 * v-hasRole 角色权限处理
 * Copyright (c) 2019 ruoyi
 */

import store from '@/store'

/**
 * 角色权限自定义指令
 * 该指令用于控制元素基于用户角色的显示逻辑
 */
export default {
  /**
   * 当指令插入到元素时调用
   * @param {Element} el - 指令绑定的元素
   * @param {Object} binding - 指令的绑定对象，包含指令的值
   * @param {VNode} vnode - 指令所在的节点
   */
  inserted(el, binding, vnode) {
    // 获取指令的值
    const { value } = binding
    // 定义超级管理员角色
    const super_admin = "admin";
    // 获取当前用户的角色
    const roles = store.getters && store.getters.roles

    // 检查指令的值是否为一个非空数组
    if (value && value instanceof Array && value.length > 0) {
      // 将指令的值视为角色标志
      const roleFlag = value

      // 检查用户是否具有相应的角色权限
      const hasRole = roles.some(role => {
        return super_admin === role || roleFlag.includes(role)
      })

      // 如果用户没有相应的角色权限，移除元素
      if (!hasRole) {
        el.parentNode && el.parentNode.removeChild(el)
      }
    } else {
      // 如果指令的值不是非空数组，则抛出错误
      throw new Error(`请设置角色权限标签值"`)
    }
  }
}
